package com.cysoft.third.echarts.component.angleAxis;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-third-echarts
 * @package com.cysoft.third.echarts.component.angleAxis
 * @date 2025/3/13 23:20
 * @desc 极坐标系的角度轴配置项
 */
public class AngleAxis {

    /**
     * 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引用组件。
     */
    private String id;

    /**
     * 角度轴所在的极坐标系的索引，默认使用第一个极坐标系。
     */
    private Integer polarIndex;

    /**
     * 起始刻度的角度，默认为 90 度（圆心正上方）。
     * 0 度为圆心的正右方。
     * @example 45 表示起始角度为 45 度
     */
    private Integer startAngle = 90;

    /**
     * 结束刻度的角度，默认为 null，表示一整个圆。
     * @since v5.5.0
     */
    private Integer endAngle;

    /**
     * 刻度增长是否按顺时针，默认顺时针。
     * @example false 表示逆时针增长
     */
    private Boolean clockwise = true;

    /**
     * 坐标轴类型。
     * 可选值：value | category | time | log
     */
    private String type = "category";

    /**
     * 坐标轴两边留白策略，类目轴和非类目轴的设置和表现不一样。
     * 类目轴：true/false，默认 true
     * 非类目轴：[minGap, maxGap]，支持百分比或数值
     */
    private Object boundaryGap;

    /**
     * 坐标轴刻度最小值。
     * 支持数值、字符串（如 'dataMin'）或函数。
     * @example function(value) { return value.min - 20; }
     */
    private Object min;

    /**
     * 坐标轴刻度最大值。
     * 支持数值、字符串（如 'dataMax'）或函数。
     * @example function(value) { return value.max + 20; }
     */
    private Object max;

    /**
     * 只在数值轴中有效。是否脱离 0 值比例。
     * 设置为 true 后坐标刻度不会强制包含零刻度。
     */
    private Boolean scale;

    /**
     * 坐标轴的分割段数，默认 5 段。
     * 实际显示的段数会根据易读性调整。
     */
    private Integer splitNumber = 5;

    /**
     * 自动计算的坐标轴最小间隔大小。
     * 例如设置为 1 保证刻度显示为整数。
     */
    private Integer minInterval;

    /**
     * 自动计算的坐标轴最大间隔大小。
     * 例如时间轴设置为 3600 * 24 * 1000 保证最大间隔为一天。
     */
    private Integer maxInterval;

    /**
     * 强制设置坐标轴分割间隔。
     * 无法在类目轴中使用。
     */
    private Integer interval;

    /**
     * 对数轴的底数，默认 10。
     * 只在对数轴中有效。
     */
    private Integer logBase = 10;

    /**
     * 用于指定轴的起始值。
     * @since v5.5.1
     */
    private Integer startValue;

    /**
     * 坐标轴是否是静态无法交互。
     */
    private Boolean silent;

    /**
     * 坐标轴的标签是否响应和触发鼠标事件，默认不响应。
     */
    private Boolean triggerEvent;

    /**
     * 坐标轴轴线相关设置
     */
    private AxisLine axisLine;

    /**
     * 坐标轴刻度相关设置
     */
    private AxisTick axisTick;

    /**
     * 坐标轴次刻度线相关设置
     * @since v4.6.0
     */
    private MinorTick minorTick;

    /**
     * 坐标轴刻度标签的相关设置
     */
    private AxisLabel axisLabel;

    /**
     * 坐标轴在 grid 区域中的分隔线
     */
    private SplitLine splitLine;

    /**
     * 坐标轴在 grid 区域中的次分隔线
     * @since v4.6.0
     */
    private MinorSplitLine minorSplitLine;

    /**
     * 坐标轴在 grid 区域中的分隔区域
     */
    private SplitArea splitArea;

    /**
     * 类目数据，在类目轴中有效
     * //TODO
     */
//    private List<DataItem> data;

    /**
     * 坐标轴指示器配置项
     */
    private AxisPointer axisPointer;

    /**
     * 坐标轴 tooltip 设置
     * @since v5.6.0
     */
    private Tooltip tooltip;

    /**
     * 是否开启动画
     */
    private Boolean animation = true;

    /**
     * 是否开启动画的阈值，默认 2000
     */
    private Integer animationThreshold = 2000;

    /**
     * 初始动画的时长，支持回调函数
     * @example function(idx) { return idx * 100; }
     */
    private Object animationDuration = 1000;

    /**
     * 初始动画的缓动效果
     * @example 'cubicOut' | 'linear'
     */
    private String animationEasing = "cubicOut";

    /**
     * 初始动画的延迟，支持回调函数
     */
    private Object animationDelay;

    /**
     * 数据更新动画的时长，支持回调函数
     */
    private Object animationDurationUpdate = 300;

    /**
     * 数据更新动画的缓动效果
     */
    private String animationEasingUpdate = "cubicInOut";

    /**
     * 数据更新动画的延迟，支持回调函数
     */
    private Object animationDelayUpdate;

    /**
     * 角度轴所有图形的 zlevel 值
     */
    private Integer zlevel;

    /**
     * 角度轴组件的所有图形的 z 值
     */
    private Integer z;
}
